{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 再次调整弱分类器数目"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T07:48:31.883420Z",
     "start_time": "2018-01-03T07:48:31.075080Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.\n",
      "  \"This module will be removed in 0.20.\", DeprecationWarning)\n"
     ]
    }
   ],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 读取数据 & 数据探索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T07:48:34.327234Z",
     "start_time": "2018-01-03T07:48:33.108747Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dpath = './data/'\n",
    "data = pd.read_csv(dpath + 'RentListingInquries_FE_train.csv')\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T07:48:36.108765Z",
     "start_time": "2018-01-03T07:48:34.474139Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>virtual</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2950</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>950.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3758</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>3</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>3300</td>\n",
       "      <td>1650.000000</td>\n",
       "      <td>1100.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2.0</td>\n",
       "      <td>2</td>\n",
       "      <td>4900</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 227 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.0         1   2950      1475.000000     1475.000000        0.0   \n",
       "1        1.0         2   2850      1425.000000      950.000000       -1.0   \n",
       "2        1.0         1   3758      1879.000000     1879.000000        0.0   \n",
       "3        1.0         2   3300      1650.000000     1100.000000       -1.0   \n",
       "4        2.0         2   4900      1633.333333     1633.333333        0.0   \n",
       "\n",
       "   room_num  Year  Month  Day  ...   virtual  walk  walls  war  washer  water  \\\n",
       "0       2.0  2016      6   11  ...         0     0      0    0       0      0   \n",
       "1       3.0  2016      6   24  ...         0     0      0    1       0      0   \n",
       "2       2.0  2016      6    3  ...         0     0      0    0       0      0   \n",
       "3       3.0  2016      6   11  ...         0     0      0    0       0      0   \n",
       "4       4.0  2016      4   12  ...         0     0      0    1       0      0   \n",
       "\n",
       "   wheelchair  wifi  windows  work  \n",
       "0           0     0        0     0  \n",
       "1           0     0        0     0  \n",
       "2           0     0        0     0  \n",
       "3           1     0        0     0  \n",
       "4           0     0        0     0  \n",
       "\n",
       "[5 rows x 227 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "target = pd.read_csv(dpath + 'RentListingInquries_FE_test.csv')\n",
    "target.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T07:48:36.584953Z",
     "start_time": "2018-01-03T07:48:36.373685Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py:517: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  self.obj[item] = s\n"
     ]
    }
   ],
   "source": [
    "def remove_noise(df):\n",
    "#remove some noise\n",
    "    df= df[df.price < 10000]\n",
    "\n",
    "    df.loc[df[\"bathrooms\"] == 112, \"bathrooms\"] = 1.5\n",
    "    df.loc[df[\"bathrooms\"] == 10, \"bathrooms\"] = 1\n",
    "    df.loc[df[\"bathrooms\"] == 20, \"bathrooms\"] = 2\n",
    "    return df\n",
    "data = remove_noise(data)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 特征编码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T07:48:38.895469Z",
     "start_time": "2018-01-03T07:48:38.826745Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_train = data['interest_level']\n",
    "X_train = data.drop('interest_level',axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据预处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T07:48:43.195816Z",
     "start_time": "2018-01-03T07:48:42.862165Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 数据标准化 \n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "# 初始化特征的标准化器\n",
    "ss_X = StandardScaler()\n",
    "\n",
    "# 分别对训练和测试数据的特征进行标准化处理\n",
    "X_train = ss_X.fit_transform(X_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 模型训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T07:48:45.217363Z",
     "start_time": "2018-01-03T07:48:45.184713Z"
    },
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)\n",
    "kfold = list(kfold.split(X_train,y_train))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T07:48:46.162269Z",
     "start_time": "2018-01-03T07:48:46.140578Z"
    },
    "collapsed": true,
    "run_control": {
     "marked": true
    }
   },
   "outputs": [],
   "source": [
    "def modelfit(alg, X_train, y_train, useTrainCV=True, cv_folds=None, early_stopping_rounds=100):\n",
    "    \n",
    "    if useTrainCV:\n",
    "        xgb_param = alg.get_xgb_params()\n",
    "        xgb_param['num_class'] = 9\n",
    "        \n",
    "        xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "        cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "                         metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "        \n",
    "        cvresult.to_csv('my_preds_6_2_247.csv', index_label = 'n_estimators')\n",
    "        \n",
    "        n_estimators = cvresult.shape[0]\n",
    "        alg.set_params(n_estimators = n_estimators)\n",
    "        \n",
    "        #Fit the algorithm on the data\n",
    "        alg.fit(X_train, y_train, eval_metric='mlogloss')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T08:05:57.834964Z",
     "start_time": "2018-01-03T07:48:48.034967Z"
    }
   },
   "outputs": [],
   "source": [
    "#调整max_depth和min_child_weight之后再次调整n_estimators(6,2)\n",
    "xgb2_3 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=247,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=6,\n",
    "        min_child_weight=2,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "modelfit(xgb2_3, X_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T08:05:58.458121Z",
     "start_time": "2018-01-03T08:05:58.130017Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nqNE2FyvCAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1196b9e10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('my_preds_6_2_247.csv')\n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "\n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(0, cvresult.shape[0])\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators_6_2_247.png' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-01-03T08:05:58.769298Z",
     "start_time": "2018-01-03T08:05:58.762140Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "logless on test 0.5999984\n",
      "n_estimators is 247\n"
     ]
    }
   ],
   "source": [
    "print('logless on test',test_means.min())\n",
    "print('n_estimators is',cvresult.shape[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "n_estimators 没有什么变化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "hide_input": false,
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  },
  "latex_envs": {
   "LaTeX_envs_menu_present": true,
   "autocomplete": true,
   "bibliofile": "biblio.bib",
   "cite_by": "apalike",
   "current_citInitial": 1,
   "eqLabelWithNumbers": true,
   "eqNumInitial": 1,
   "hotkeys": {
    "equation": "Ctrl-E",
    "itemize": "Ctrl-I"
   },
   "labels_anchors": false,
   "latex_user_defs": false,
   "report_style_numbering": false,
   "user_envs_cfg": false
  },
  "nbTranslate": {
   "displayLangs": [
    "*"
   ],
   "hotkey": "alt-t",
   "langInMainMenu": true,
   "sourceLang": "en",
   "targetLang": "fr",
   "useGoogleTranslate": true
  },
  "toc": {
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": "block",
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
